#include <REGX52.H>

sbit I2C_SCL=P2^1;
sbit I2C_SDA=P2^0;
/**
  * @brief  I2C开始
  * @param  无
  * @retval 无
  */
void I2C_Start()//起始位，SCL高电平期间，SDA由高变低
{
	I2C_SDA=1;
	I2C_SCL=1;
	I2C_SDA=0;
	I2C_SCL=0;
}
/**
  * @brief  I2C停止
  * @param  无
  * @retval 无
  */
void I2C_Stop()//停止位，SCL高电平期间，SDA由低变高
{
	I2C_SDA=0;
	I2C_SCL=1;
	I2C_SDA=1;
}
/**
  * @brief  I2C发送一个字节
  * @param  Byte 要发送的字节
  * @retval 
  */
void I2C_SendByte(unsigned char Byte)//发送字节，从高位到低位
{
	unsigned char i=0;
	for(i=0;i<8;i++)
	{
		I2C_SDA=Byte&(0x80>>i);
		I2C_SCL=1;
		I2C_SCL=0;
	}
}
/**
  * @brief  I2C接收一个字节
  * @param  无
  * @retval Byte 接收到一个字节
  */
unsigned char I2C_ReceiveByte(void)//接收字节
{
	unsigned char i,Byte=0x00;
	I2C_SDA=1;
	for(i=0;i<8;i++)
	{
		I2C_SCL=1;
		if(I2C_SDA){Byte|=(0x80>>i);}
		I2C_SCL=0;
	}
	return Byte;
}
/**
  * @brief  I2C发送应答
  * @param  ACKBit 应答位，0为应答，1为非应答
  * @retval 无
  */
void I2C_SendACK(unsigned char ACKBit)//发送应答
{
	I2C_SDA=ACKBit;
	I2C_SCL=1;
	I2C_SCL=0;
}
/**
  * @brief  I2C接收应答
  * @param  无
  * @retval  ACKBit 应答位，0为应答，1为非应答
  */
unsigned char I2C_ReceiveACK()//接收应答
{
	unsigned char ACKBit;
	I2C_SDA=1;
	I2C_SCL=1;
	ACKBit=I2C_SDA;
	I2C_SCL=0;
	return ACKBit;
}